#pragma once

template<typename Key, typename Val, typename Hash>
std::pair<const Key, Val>* _hHashMapIterator<Key, Val, Hash>::operator->()
{
	assert(_pMap);
	if (!_pNode)
		return NULL;

	return _pNode->_pValPr;
}

template<typename Key, typename Val, typename Hash>
std::pair<const Key, Val>& _hHashMapIterator<Key, Val, Hash>::operator*()
{
	assert(_pMap);
	assert(_pNode);
	assert(_pNode->_pValPr);
	return *_pNode->_pValPr;
}

template<typename Key, typename Val, typename Hash>
_hHashMapIterator<Key, Val, Hash>& _hHashMapIterator<Key, Val, Hash>::operator++()
{
	assert(_pMap);
	assert(_pNode);
	assert(_pNode->_pValPr);
	_pNode = _pNode->getNext();
	return *this;
}

template<typename Key, typename Val, typename Hash>
_hHashMapIterator<Key, Val, Hash> _hHashMapIterator<Key, Val, Hash>::operator++(int)
{
	assert(_pMap);
	assert(_pNode);
	assert(_pNode->_pValPr);
	_hHashVectorIterator<Key, Val> it;
	it._pMap = _pMap;
	it._pNode = _pNode;
	_pNode = _pNode->getNext();
	return it;
}